//stc8H2K08U  LCDʾ


#include <COMM/STC8H.h>					 //MCUͷļ
#include "intrins.h"					 //nopָͷļ 
#include "stdio.h"
#define uchar unsigned char                                 //ͺ궨
#define uint unsigned int                                 //ͺ궨
	
typedef     unsigned char   u8;
typedef     unsigned int    u16;
typedef     unsigned long   u32;

//ADCⲿstc8(3-1)//------------------------------------------------------------//3-1
/*************  غ    **************/
u16 Get_ADC12bitResult(u8 channel); //channel = 0~15
u16 adcadc;

unsigned int fushu=0;//ʾֵΪʶ
//u32 ADC1=0,ADC2=0,ADC3=0,ADC4=0,ADC5=0,ADC6=0,ADC7=0,ADC8=0,ADC9=0,ADC10=0; //ΪADC˲
/*************  غ    **************/


//========================================================================
// : u16 Get_ADC12bitResult(u8 channel)
// : ѯһADC.
// : channel: ѡҪתADC.
// : 12λADC.
// 汾: V1.0, 2012-10-22
//========================================================================
u16 Get_ADC12bitResult(u8 channel)  //channel = 0~15
{
    ADC_RES = 0;
    ADC_RESL = 0;

    ADC_CONTR = (ADC_CONTR & 0xF0) | 0x40 | channel;    // AD ת
    _nop_();
    _nop_();
    _nop_();
    _nop_();

    while((ADC_CONTR & 0x20) == 0)  ;   //wait for ADC finish
    ADC_CONTR &= ~0x20;     //ADC־
    return  (((u16)ADC_RES << 8) | ADC_RESL);
}

u32 adc_average;
adc_i=0;
u32 wendu;


//ADCⲿstc8(3-1)//------------------------------------------------------------//3-1






//TM1621d׼1/3

/*tm1621dLCDʾ-޹صLCDʾܵŻвP20 21 22  P34 35 ڸTM1621D 1621D_׼1/3*/
#define nop _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //궨
/******************TM1621Dģ*********************/
#define SYSDIS   0x00    //ϵͳLCDƫѹ        
#define SYSEN    0x02    //ϵͳ      
#define LCDOFF   0x04    //LCDƫѹ
#define LCDON    0x06    //LCDƫѹ                                                         
#define RC       0x30    //ڲRC      
#define BIAS     0x52    //1/3ƫѹ 4       
#define WDTDIS   0x0a    //ֹŹ
#define WDTEN    0x0e    //Ź
/*ڲLCDƫѹҲʾʾLCD ؿŹ ʺ//1/3ƫѹ 4  */

/********************ƶ˿Ҫʵ**********************/
sbit CS=P3^7;
sbit WRITE=P3^6;
sbit DATA=P3^5;

/********************˵ûõTM1621Dٷ*************************/
uchar code Smg[16]={0x05,0xff,0xc7,0xE5,0x6C,0xAD,0xaf,0xE0,0xef,0xed,0xee,0x2f,0x8b,0x67,0x8f,0x8e};  //0~F
uchar code Tab0[16]={0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //
/********************ʱ*************************/
void delay_nms(uint n)
{
   uint i;
   while(n--)
     for(i=0;i<500;i++);
}
/********************Ӹλд*************************/
void Write_Data_H(uchar Data, uchar Cnt)           //DataĸcntλдTM1621Dλǰ
{
uchar i;
for(i=0;i<Cnt;i++)
{
  WRITE=0;
	
  if(Data&0x80)                                   //λ
    DATA=1;               
  else
    DATA=0;
  nop;

  WRITE=1;
  nop;
  Data<<=1;
}
WRITE=0;
DATA=0;
}
/********************ӵλд*************************/
void Write_Data_L(uchar Data,uchar Cnt) //Data ĵcntλдTM1621Dλǰ
{
unsigned char i;
for(i=0;i<Cnt;i++)
{
   WRITE=0;
	        nop;
   if(Data&0x01)                                 //ӵλ
     DATA=1;  
   else
     DATA=0;
        nop;

        WRITE=1;
	         nop;
        Data>>=1;
}
  WRITE=0;
  DATA=0;  
}

/********************д*************************/
void WriteCmd(uchar Cmd)
{
CS=0;
nop;
Write_Data_H(0x80,4);     //д־100
Write_Data_H(Cmd,8);      //д
CS=1;
nop;
}

/*********ַָдݣʵд4λ************/
void WriteOneData(uchar Addr, uchar Data)
{
	
Addr=Addr<<2;
CS=0;
nop;
Write_Data_H(0xa0,3);     //дݱ־101
	
Write_Data_H(Addr,6);  //дַ
Write_Data_L(Data,4);     //д
nop;	
CS=1;
nop;
}

/*********д뷽ʽÿΪ8λдݣÿȥ************/
/*
void WriteAllData(uchar Addr,uchar *p,uchar cnt)
{
uchar i;
CS=0;
Write_Data_H(0xa0,3);          //дݱ־101
Write_Data_H(Addr<<2,6);        //дַ
for(i=0;i<cnt;i++)                //д
{
   Write_Data_L(*p,8);            
   p++;
}
CS=1;
nop;
}
*/
/*******************TM1621Dʼ**********************/
void TM1621D_init()
{
CS=1;
WRITE=1;
DATA=1;
nop;
delay_nms(1);                        
WriteCmd(BIAS);                 //1/3ƫѹ 4
WriteCmd(RC);                         //ڲRC	
WriteCmd(SYSDIS);                 //ϵͳLCDƫѹ
WriteCmd(WDTDIS);								 //ֹŹ
WriteCmd(SYSEN);                 //ϵͳ
WriteCmd(LCDON);                 //LCDƫѹ
}

/*************TM16211621DӦȫղǶԵ*****************/
void Clear1621()
{
uchar i;
for(i=0;i<32;i++) //9-21
{
WriteOneData(i, 0x00);
}
}
/*************TM1621ȫ ûȫʾвԵĵطҪӵ*****************/
/*
void quanping1621()
{
uchar i;
for(i=9;i<22;i++) //9-21
{
WriteOneData(i, 0x0f);
}
}
*/
/*tm1621dLCDʾ-޹صLCDʾܵŻвP20 21 22  P34 35 ڸTM1621D 1621D_׼1/3*/

//TM1621d׼1/3

//ʾlcd_xsbl
unsigned int lcd_xsbl=0;//lcdʾ
static void lcd_1(unsigned long xsbl_lcd)//1λλ(λ)
{
				 if(xsbl_lcd / 100 == 0)
    {
        WriteOneData(0x09,0x0b);	WriteOneData(0x0e,0x0e);  	            // 0
    }
    else if(xsbl_lcd / 100== 1)
    {
        WriteOneData(0x09,0x00);	WriteOneData(0x0e,0x06);  	            // 1
    }
    else if(xsbl_lcd / 100== 2)
    {
        WriteOneData(0x09,0x07);	WriteOneData(0x0e,0x0c);  	            // 2
    }   
    else if(xsbl_lcd / 100== 3)
    {
        WriteOneData(0x09,0x05);	WriteOneData(0x0e,0x0e);  	            // 3
    } 
    else if(xsbl_lcd / 100== 4)
    {
        WriteOneData(0x09,0x0c);	WriteOneData(0x0e,0x06);  	            // 4
    }
    else if(xsbl_lcd / 100== 5)
    {
        WriteOneData(0x09,0x0d);	WriteOneData(0x0e,0x0a);  	            // 5
    }
    else if(xsbl_lcd / 100== 6)
    {
        WriteOneData(0x09,0x0f);	WriteOneData(0x0e,0x0a);  	            // 6
    }
    else if(xsbl_lcd / 100== 7)
    {
        WriteOneData(0x09,0x00);	WriteOneData(0x0e,0x0e);                // 7
    }
    else if(xsbl_lcd / 100== 8)
    {
        WriteOneData(0x09,0x0f);	WriteOneData(0x0e,0x0e);  	            // 8
    }
    else if(xsbl_lcd / 100== 9)
    {
				WriteOneData(0x09,0x0d);	WriteOneData(0x0e,0x0e); 	      	      // 9
    }
}

static void lcd_2(unsigned long xsbl_lcd)//2λʮλ(λ)
{
				 if(xsbl_lcd % 100/10== 0)
    {
        WriteOneData(0x0c,0x0e);	WriteOneData(0x0d,0x0b);  	            // 0
    }
    else if(xsbl_lcd % 100/10== 1)
    {
        WriteOneData(0x0c,0x06);	WriteOneData(0x0d,0x00);  	            // 1
    }
    else if(xsbl_lcd % 100/10== 2)
    {
        WriteOneData(0x0c,0x0c);	WriteOneData(0x0d,0x07);  	            // 2
    }   
    else if(xsbl_lcd % 100/10== 3)
    {
        WriteOneData(0x0c,0x0e);	WriteOneData(0x0d,0x05);  	            // 3
    } 
    else if(xsbl_lcd % 100/10== 4)
    {
        WriteOneData(0x0c,0x06);	WriteOneData(0x0d,0x0c);  	            // 4
    }
    else if(xsbl_lcd % 100/10== 5)
    {
        WriteOneData(0x0c,0x0a);	WriteOneData(0x0d,0x0d);  	            // 5
    }
    else if(xsbl_lcd % 100/10== 6)
    {
        WriteOneData(0x0c,0x0a);	WriteOneData(0x0d,0x0f);  	            // 6
    }
    else if(xsbl_lcd % 100/10== 7)
    {
        WriteOneData(0x0c,0x0e);	WriteOneData(0x0d,0x00);  	            // 7
    }
    else if(xsbl_lcd % 100/10== 8)
    {
        WriteOneData(0x0c,0x0e);	WriteOneData(0x0d,0x0f);  	            // 8
    }
    else if(xsbl_lcd % 100/10== 9)
    {
        WriteOneData(0x0c,0x0e);	WriteOneData(0x0d,0x0d);  	            // 0
    }
}

static void lcd_3(unsigned long xsbl_lcd)//3λλ(λ)
{
    if(xsbl_lcd % 10 == 0)
    {
        WriteOneData(0x0a,0x0e);	WriteOneData(0x0b,0x0b);  	            // 0
    }
    else if(xsbl_lcd % 10 == 1)
    {
        WriteOneData(0x0a,0x06);	WriteOneData(0x0b,0x00);  	            // 1
    }
    else if(xsbl_lcd % 10 == 2)
    {
        WriteOneData(0x0a,0x0c);	WriteOneData(0x0b,0x07);  	            // 2
    }   
    else if(xsbl_lcd % 10 == 3)
    {
        WriteOneData(0x0a,0x0e);	WriteOneData(0x0b,0x05);  	            // 3
    } 
    else if(xsbl_lcd % 10 == 4)
    {
        WriteOneData(0x0a,0x06);	WriteOneData(0x0b,0x0c);  	            // 4
    }
    else if(xsbl_lcd % 10 == 5)
    {
        WriteOneData(0x0a,0x0a);	WriteOneData(0x0b,0x0d);  	            // 5
    }
    else if(xsbl_lcd % 10 == 6)
    {
        WriteOneData(0x0a,0x0a);	WriteOneData(0x0b,0x0f);  	            // 6
    }
    else if(xsbl_lcd % 10 == 7)
    {
        WriteOneData(0x0a,0x0e);	WriteOneData(0x0b,0x00);  	            // 7
    }
    else if(xsbl_lcd % 10 == 8)
    {
        WriteOneData(0x0a,0x0e);	WriteOneData(0x0b,0x0f);  	            // 8
    }
    else if(xsbl_lcd % 10 == 9)
    {
        WriteOneData(0x0a,0x0e);	WriteOneData(0x0b,0x0d);  	            // 0
    }
}
	
//ʾlcd_xsbl


void Delay100ms(void)	//@11.0592MHz
{
	unsigned char data i, j, k;

	_nop_();
	_nop_();
	i = 43;
	j = 6;
	k = 203;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main()
{
//main

//adcòstc8(3-2)//------------------------------------------------------------//3-2
    ADCTIM = 0x3f;		// ADC ڲʱADCʱ佨ֵ
    ADCCFG = 0x2f;		// ADC ʱΪϵͳʱ/2/16
    ADC_CONTR = 0x80; //ʹ ADC ģ
//adcòstc8(3-2)//------------------------------------------------------------//3-2


	
//TM1621dӦò2/3
	{
/*tm1621dLCDʾ-޹صLCDʾܵŻвP20 21 22  P34 35 ڸTM1621D 1621D_Ӧò2/3*/
    
		P3M0 = 0x08; P3M1 = 0x10;  //P33Ϊ  P34   ׼˫



TM1621D_init();                //ʼظʹѭҪĻ
delay_nms(1);
	Clear1621();//LCDԴ
	
//quanping1621();  //ӦÿȫʾŶ
/*tm1621dLCDʾ-޹صLCDʾܵŻвP20 21 22  P34 35 ڸTM1621D 1621D_Ӧò2/3*/
	}
	

	
while(1)
{//while


	P33=1;
Delay100ms();
//ADCⲿ//------------------------------------------------------------//3-3


                Get_ADC12bitResult(12);  //ȶһβ, ڲĲݵĵѹֵ.
								adc_average=0;
                for(adc_i=0; adc_i<200; adc_i++)
                {
                   adc_average += Get_ADC12bitResult(12); //ⲿѹADC
                }
               adc_average=adc_average/200;
								
								adc_average=adc_average*61645/100;
								//adc_average=j*2525000/4096;  2352   2270  2352    1.172V
			
//ADC
adc_average=adc_average+30000;
								
				//				adc_average=1124555;
//ѹת¶			
if (adc_average>2284908)
{
wendu=200;

}
//0- -20
if (adc_average<=2284908 && adc_average>2216162)
{	
wendu=200-(2284908-adc_average)/1374.92;
}

if (adc_average<=2216162 && adc_average>2134040)
{	
wendu=150-(2216162-adc_average)/1642.44;
}
if (adc_average<=2134040 && adc_average>2038550)
{	
wendu=100-(2134040-adc_average)/1909.8;
}
if (adc_average<=2038550 && adc_average>1929636)
{	
wendu=50-(2038550-adc_average)/2178.28;
}


if (adc_average>1929636)
{fushu=1;}
else
{fushu=0;}
	
if (adc_average<=1929636 && adc_average>1808450)
{	
wendu=(1929636-adc_average)/2423.72;
}
if (adc_average<=1808450 && adc_average>1677423)
{	
wendu=50+(1808450-adc_average)/2620.54;
}
if (adc_average<=1677423 && adc_average>1540080)
{	
wendu=100+(1677423-adc_average)/2746.86;
}
if (adc_average<=1540080 && adc_average>1399940)
{	
wendu=150+(1540080-adc_average)/2802.8;
}
if (adc_average<=1399940 && adc_average>1260777)
{	
wendu=200+(1399940-adc_average)/2783.26;
}
if (adc_average<=1260777 && adc_average>1124555)
{	
wendu=250+(1260777-adc_average)/2724.44;
}
if (adc_average<=1124555 && adc_average>995850)
{	
wendu=300+(1124555-adc_average)/2574.1;
}
if (adc_average<=995850 && adc_average>875800)
{	
wendu=350+(995850-adc_average)/2401;
}
if (adc_average<=875800 && adc_average>766185)
{	
wendu=400+(875800-adc_average)/2192.3;
}
if (adc_average<=766185 && adc_average>667270)
{	
wendu=450+(766185-adc_average)/1978.3;
}
if (adc_average<=667270 && adc_average>579230)
{	
wendu=500+(667270-adc_average)/1760.8;
}
if (adc_average<=579230 && adc_average>501700)
{	
wendu=550+(579230-adc_average)/1550.6;
}
if (adc_average<=501700 && adc_average>433900)
{	
wendu=600+(501700-adc_average)/1356;
}
if (adc_average<=433900 && adc_average>375100)
{	
wendu=650+(433900-adc_average)/1176;
}
if (adc_average<=375100)
{	
wendu=700;
}
		
//ADCⲿ//------------------------------------------------------------//3-3
	
	
	lcd_xsbl=wendu;
	


/*tm1621dLCDʾ-޹صLCDʾܵŻвP20 21 22  P34 35 ڸTM1621D 1621D_ʾ3/3*/
if (fushu==1)
		{
lcd_xsbl=lcd_xsbl/10;
	WriteOneData(0x09,0x04);
	WriteOneData(0x0e,0x00);
			//lcd_1(lcd_xsbl);
			

lcd_2(lcd_xsbl);
lcd_3(lcd_xsbl);
		}	
if (fushu==0)
		{
lcd_1(lcd_xsbl);
lcd_2(lcd_xsbl);
lcd_3(lcd_xsbl);
		}	
/*tm1621dLCDʾ-޹صLCDʾܵŻвP20 21 22  P34 35 ڸTM1621D 1621D_ʾ3/3*/
	
P33=0;
		

		
}//while
	
}